#include "mainwindow.h"
#include <QApplication>
#include <QDebug>

int main(int argc, char* argv[])
{
    QApplication a(argc, argv);
    //    MainWindow w;
    //    w.show();
    QList<QString> list;
    list << "A"
         << "B"
         << "C"
         << "D";
    // Java style
    QListIterator<QString> i(list);
    while (i.hasNext()) {
        qDebug() << i.next();
    }

    // STL style
    QList<QString>::iterator j;
    for (j = list.begin(); j != list.end(); ++j) {
        *j = (*j).toLower();
        qDebug() << *j;
    }
    foreach(const QString & k, list)
    {
        qDebug() << k;
    }
    return a.exec();
}
/*
顺序存储容器
QList<T>：这是至今为止提供的最通用的容器类。它将给定的类型 T 的对象以列表的形式进行存储，与一个整型的索引关联。
          QList在内部使用数组实现，同时提供基于索引的快速访问。我们可以使用 QList::append()和QList::prepend()在列表尾部或头部添加元素，也可以使用QList::insert()在中间插入。
          相比其它容器类，QList专门为这种修改操作作了优化。QStringList继承自QList<QString>。
QLinkedList<T>：类似于 QList，除了它是使用遍历器进行遍历，而不是基于整数索引的随机访问。对于在中部插入大量数据，它的性能要优于QList。
                同时具有更好的遍历器语义（只要数据元素存在，QLinkedList的遍历器就会指向一个合法元素，相比而言，当插入或删除数据时，QList的遍历器就会指向一个非法值）。
QVector<T>：用于在内存的连续区存储一系列给定类型的值。在头部或中间插入数据可能会非常慢，因为这会引起大量数据在内存中的移动。
QStack<T>： 这是QVector的子类，提供了后进先出（LIFO）语义。相比QVector，它提供了额外的函数：push()，pop()和top()。
QQueue<T>： 这是QList的子类，提供了先进先出（FIFO）语义。相比QList，它提供了额外的函数：enqueue()，dequeue()和head()。

关联容器
QSet<T>：   提供单值的数学上面的集合，具有快速的查找性能。
QMap<Key, T>：      提供了字典数据结构（关联数组），将类型 T 的值同类型 Key 的键关联起来。通常，每个键与一个值关联。QMap以键的顺序存储数据；如果顺序无关，QHash提供了更好的性能。
QMultiMap<Key, T>： 这是QMap的子类，提供了多值映射：一个键可以与多个值关联。
QHash<Key, T>：     该类同QMap的接口几乎相同，但是提供了更快的查找。QHash以字母顺序存储数据。
QMultiHash<Key, T>：这是QHash的子类，提供了多值散列。
*/
